package net.hn.hnms.biz.analysis.utils;

public class FireRuleUtil {

    /**
     * 获取煤自燃倾向性的描述信息
     *
     * @param levelScore 自燃倾向性得分（60, 80, 100）
     * @return 描述信息（String 类型）
     */
    public static String getCoalSpontaneousCombustionTendencyMessage(int levelScore) {
        String message = "";

        // 根据得分返回对应的描述信息
        if (levelScore == 60) {
            message = "Ⅰ类易自燃";
        } else if (levelScore == 80) {
            message = "Ⅱ类自燃";
        } else if (levelScore == 100) {
            message = "Ⅲ类不易自燃";
        }

        return message;
    }

    /**
     * 获取烟雾浓度得分
     *
     * @param smokeCount                    烟雾数量
     * @param smokeConcentrationCoefficient 烟雾浓度系数
     * @param smokeDuration                 烟雾持续时间
     * @return 得分（float 类型）
     */
    public static float getSmokeConcentrationScores(float smokeCount, float smokeConcentrationCoefficient, float smokeDuration) {
        // 计算 p1 和 p2
        float p1 = smokeCount * smokeConcentrationCoefficient;
        float p2 = 100 * getSmokeConcentrationDurationCoefficient(smokeDuration);

        // 计算最终参数
        double parameter = Math.exp(-p1) * p2;

        // 四舍五入保留 4 位小数
        return (float) (Math.round(parameter * 10000) / 10000.0);
    }


    /**
     * 获取烟雾持续时间系数
     *
     * @param smokeDuration 烟雾持续时间
     * @return 持续时间系数（float 类型）
     */
    public static float getSmokeConcentrationDurationCoefficient(float smokeDuration) {
        float coefficient = 1.0f;

        // 根据烟雾持续时间范围计算系数
        if (smokeDuration >= 10 && smokeDuration < 20) {
            coefficient = 0.85f;
        } else if (smokeDuration >= 20 && smokeDuration < 30) {
            coefficient = 0.75f;
        } else if (smokeDuration >= 30) {
            coefficient = 0.6f;
        }

        return coefficient;
    }

    /**
     * 获取温度浓度得分
     *
     * @param temperatureCount       温度数量
     * @param temperatureCoefficient 温度系数
     * @return 得分（float 类型）
     */
    public static float getTemperatureConcentrationScores(float temperatureCount, float temperatureCoefficient) {
        // 计算 coefficient 的值
        float coefficientValue = -(temperatureCount * temperatureCoefficient);

        // 计算最终参数
        double parameter = Math.exp(coefficientValue) * 100;

        // 四舍五入保留 4 位小数
        return (float) (Math.round(parameter * 10000) / 10000.0);
    }


    /**
     * 获取关键气体浓度得分
     *
     * @param gasCount                    气体数量
     * @param gasConcentrationCoefficient 气体浓度系数
     * @param gasDuration                 气体持续时间
     * @return 得分（float 类型）
     */
    public static float getKeyGasConcentrationScores(float gasCount, float gasConcentrationCoefficient, float gasDuration) {
        // 计算 p1 和 p2
        float p1 = gasCount * gasConcentrationCoefficient;
        float p2 = 100 * getKeyGasCoefficient(gasDuration);

        // 计算最终参数
        double parameter = Math.exp(-p1) * p2;

        // 四舍五入保留 4 位小数
        return (float) (Math.round(parameter * 10000) / 10000.0);
    }

    /**
     * 获取关键气体系数
     *
     * @param gasDuration 气体持续时间
     * @return 系数（float 类型）
     */
    public static float getKeyGasCoefficient(float gasDuration) {
        float coefficient = 1.0f;
        if (gasDuration >= 10 && gasDuration < 20) {
            coefficient = 0.85f;
        } else if (gasDuration >= 20 && gasDuration < 30) {
            coefficient = 0.75f;
        } else if (gasDuration >= 30) {
            coefficient = 0.6f;
        }

        return coefficient;
    }

    /**
     * 根据温度值获取内因火灾报警级别
     *
     * @param temperatureValue 温度值
     * @return 报警级别（float 类型）
     */
    public static float getCombustionAlarmDetailLevel(float temperatureValue) {
        float result = 0;

        if (temperatureValue >= 0 && temperatureValue < 40) {
            result = 1;
        } else if (temperatureValue >= 40 && temperatureValue < 60) {
            result = 2;
        } else if (temperatureValue >= 60 && temperatureValue < 80) {
            result = 3;
        } else if (temperatureValue >= 80 && temperatureValue < 130) {
            result = 4;
        } else if (temperatureValue >= 130 && temperatureValue < 160) {
            result = 5;
        } else if (temperatureValue >= 160 && temperatureValue < 180) {
            result = 6;
        } else if (temperatureValue >= 180) {
            result = 7;
        }

        return result;
    }



}
